#ifndef __COMMON_HPP
#define __COMMON_HPP

#include <fstream>
#include <string>
#include <climits>

using namespace std;

inline long getFileSize(fstream& fst)
{
	streampos before = fst.tellg();
	fst.seekg(0L, ios::end);
	long size = fst.tellg();
	fst.seekg(before);
		
	return size;
}

inline long getFileSize(ifstream& fst)
{
	streampos before = fst.tellg();
	fst.seekg(0L, ios::end);
	long size = fst.tellg();
	fst.seekg(before);
		
	return size;
}
	
inline long getFileSize(ofstream& fst)
{
	streampos before = fst.tellp();
	fst.seekp(0L, ios::end);
	long size = fst.tellp();
	fst.seekp(before);
	
	return size;
}

inline size_t toSize_t(const string& numStr)
{
	size_t result = 0;
	
	for(size_t i = 0, j = numStr.length(); i < j; ++i)
	{
		result *= 10;
		result += numStr[i] - '0';
	}
	
	return result;
}

template<typename T> inline T getMin(const T& a, const T& b)
{
	return a < b? a: b;
}
/*
0 10-1
10 100-1
100 1000-1
*/
/*
10"0 10"1-1
*/
/*
678
6780
*/
/*
template<typename IntType>inline IntType getDecBitCount(IntType x)
{
	n * (1/10)^n = 0?
	
	
}
*/
#endif